package com.bingo.generate.comm.util;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.jdbc.core.JdbcTemplate;

import java.nio.file.Files;
import java.nio.file.Path;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;

public class JdbcUtil extends JdbcTemplate {

    public static JdbcUtil ins;

    // 表示定义数据库的用户名
    public static String username ;

    // 定义数据库的密码
    public static String pwd;

    // 定义数据库的驱动信息
    public static String driver;

    // 定义访问数据库的地址
    public static String url;

    // 定义数据库的链接
    private Connection connection;

    /**
     * 加载数据库配置信息，并给相关的属性赋值
     */
    public static void loadConfig(Properties prop) {
        username = prop.getProperty("jdbc.user");
        pwd = prop.getProperty("jdbc.pwd");
        driver = prop.getProperty("jdbc.driver");
        url = prop.getProperty("jdbc.url");
        //  加载数据库
        DruidDataSource dataSource=new DruidDataSource();
        dataSource.setUsername(username);
        dataSource.setPassword(pwd);
        dataSource.setUrl(url);
        dataSource.setDriverClassName(driver);
        //  最多存在两个连接
        dataSource.setMaxActive(2);
        dataSource.setMinIdle(0);
        dataSource.setMaxWait(9000);//  9秒连接超时就断开
        ins=new JdbcUtil();
        ins.setDataSource(dataSource);
    }

    public static void loadConfig() {
        if(ins!=null){
            return;
        }
        Path cofPath=PathUtils.getCofPath("db.properties");
        //  通过关闭文件夹时会自动保存文件
        if(!Files.exists(PathUtils.getCofPath("db.properties"))){
            System.out.println("不存在数据库的配置文件,正在生成配置文件");
            Path resPath=PathUtils.getResPath("db-example.properties");
            FileUtils.safeCreate(resPath);
            FileUtils.copy(resPath,cofPath);
        }
        JdbcUtil.loadConfig(PathUtils.toProperties(cofPath));
    }

    public static void loadConfig(String dbPropertiesName) {
        if(ins!=null){
            return;
        }
        Path cofPath=PathUtils.getCofPath(dbPropertiesName);
        //  通过关闭文件夹时会自动保存文件
        if(!Files.exists(PathUtils.getCofPath("db.properties"))){
            System.out.println("不存在数据库的配置文件,正在生成配置文件");
            Path resPath=PathUtils.getResPath("db-example.properties");
            FileUtils.safeCreate(resPath);
            FileUtils.copy(resPath,cofPath);
        }
        JdbcUtil.loadConfig(PathUtils.toProperties(cofPath));
    }

    public JdbcUtil() {

    }

    /**
     * 获取数据库连接
     *
     * @return 数据库连接
     */
    public Connection getConnection() {
        try {
            Class.forName(driver); // 注册驱动
            connection = DriverManager.getConnection(url, username, pwd); // 获取连接
        } catch (Exception e) {
            throw new RuntimeException("get connection error!", e);
        }
        return connection;
    }

    /*public static void main(String[] args) {
        JdbcUtil jdbcUtil = new JdbcUtil();
        jdbcUtil.getConnection();
        try {
            List<Map<String, Object>> result = jdbcUtil.findResult(
                    "select * from t_student", null);
            for (Map<String, Object> m : result) {
                System.out.println(m);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            jdbcUtil.releaseConn();
        }
    }*/


}
